package com.sqsf.service.impl;

import com.sqsf.dao.AccountDao;
import com.sqsf.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Service("accountService")
//如果一个类中 多个方法都需要进行事务管理 那么可以直接在类上使用事务注解
@Transactional
//会为当前类中所有方法进行事务管理定义
//如果某个方法需要单独定义 则在对应方法单独书写注解即可
public class AccountServiceImpl implements AccountService {
    @Autowired
    private AccountDao accountDao;
    public void setAccountDao(AccountDao accountDao) {
        this.accountDao = accountDao;
    }


    //spring声明式事务管理注解开发 仅需一个注解Transactional即可实现事务定义
    //@Transactional
    //为当前方法添加默认的事务定义信息
    // <tx:method name="zz"/>
    //也可以通过注解为方法设置不同的事务定义信息
    @Transactional(isolation= Isolation.DEFAULT,propagation= Propagation.REQUIRED,timeout = -1,readOnly = false)
    // <tx:method name="zz" isolation="DEFAULT" propagation="REQUIRED" timeout="-1" read-only="false"/>
    @Override
    public void zz(String out, String in, double money) {
        accountDao.updateSubMoneyByName(out,money);
        System.out.println(1/0);
        accountDao.updateAddMoneyByName(in,money);
    }
}
